<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

require_once APPPATH . 'controllers/main.php';

/**
 * Контроллер отображения контента
 *
 * @package CoreFramework
 * @version 1.0
 * @author Gennadiy Kozlenko
 */
class Page extends Main {
   
   /**
    * Конструктор класса
    *
    * @access public
    * @return Page
    */
   function Page() {
      parent::Main();
   } // end Page
   
   /**
    * Метод по умолчанию
    *
    * @access public
    */
   function index() {
      $names = func_get_args();
      // Получаем страницу, если это возможно
      $result = array();
      $this->load->model('m_table');
      $this->m_table->set_table('contents');
      if (0 < count($names)) {
         // Страница по названию
         $id_parent = null;
         foreach ($names as $name) {
            $this->m_table->clean();
            $this->m_table->add_restriction('name', urldecode($name));
            $this->m_table->add_restriction('id_parent', $id_parent);
            $this->m_table->add_restriction('status', 'active');
            $this->m_table->set_limit(1);
            if (0 == $this->m_table->get_count()) {
               show_404();
            }
            $result = $this->m_table->next_result();
            $id_parent = $result['id_content'];
         }
      } else {
         // Страница по дефалту
         $this->m_table->add_restriction('is_default', 'yes');
         $this->m_table->set_limit(1);
         if (0 < $this->m_table->get_count()) {
            $result = $this->m_table->next_result();
         }
      }
      
      if (0 < count($result) && empty($result['content'])) {
         // Если пуcтой контент, смотрим, есть ли дочерное записи
         $this->m_table->clean();
         $this->m_table->add_restriction('id_parent', $result['id_content']);
         $this->m_table->add_restriction('status', 'active');
         $this->m_table->add_sort('position');
         $this->m_table->set_limit(1);
         $this->m_table->load_results();
         if (0 < $this->m_table->get_count()) {
            $result = $this->m_table->next_result();
         }
      }
      
      // Если это документ, то отдаем контент и успокаиваемся
      if (!empty($result['document'])) {
         $this->load->helper('file');
         $this->load->helper('download');
         force_download($result['document_name'], read_file($result['document']));
      }
      
      $layout = 'default';
      $content = '';
      $title = $this->variables->get('site_name');
      if (0 < count($result)) {
         // Параметры необходимые для некоторых виджетов
         $this->add_param('id_content', $result['id_content']);
         $this->add_param('id_template', $result['id_template']);
         
         // Смотрим, а не ссылка ли это?
         if (!empty($result['link'])) {
            $this->go(str_replace(array('[base_url]/', '[base_url]'), base_url(), $result['link']));
         }
         
         // Заголовок
         $title = $result['page_title'] ? $result['page_title'] : $result['title'];
         
         // SEO параметры
         if (!empty($result['page_description'])) {
            $this->set_description($result['page_description']);
         }
         if (!empty($result['page_keywords'])) {
            $this->set_keywords($result['page_keywords']);
         }
         $this->add_param('title', $result['title']);
         
         $this->load->helper('content');
         $this->add_param('link', get_url($result));
         
         // SAPE context
         global $sape_context;
         if (null !== $sape_context) {
            $result['content'] = $sape_context->replace_in_text_segment($result['content']);
         }
         
         // Получаем путь к странице
         $this->m_table->set_table('contents');
         $this->m_table->add_restriction('id_menu', $result['id_menu']);
         $this->m_table->add_restriction('status', 'active');
         $this->m_table->add_sort('position');
         $this->m_table->load_results();
         $contents = $this->m_table->get_results();
         $this->load->helper('tree');
         $tree = array_tree($contents, 'id_content', 'id_parent');
         $branch = tree_search($tree, 'id_content', $result['id_content']);
         // path
         $links = array(
            array(
               'title' => $this->lang->line('front_title'),
               'link'  => base_url()
            ),
         );
         $links = array_merge($links, $this->_get_links($branch));
         $this->load->helper('path');
         $path = create_path($links);
         $this->add_param('path', $path);
         
         // Выбираем лайаут
         $this->load->model('m_template');
         $this->m_template->set_id($result['id_template']);
         $cover = $this->m_template->get('content');
         if (!empty($cover)) {
            // Используем лайаут content и обертку
            $layout = 'content';
            $cover = $this->m_template->get('content');
            $content = str_replace('{%page_content%}', $result['content'], $cover);
         } else {
            $content = $result['content'];
         }
      }
      
      // Отображаем
      $this->set_layout($layout);
      $this->set_content($content);
      $this->set_title($title);
      $this->display();
   } // end index
   
   function _get_links($branch) {
      $array = array(
         array(
            'title' => $branch['title'],
            'link'  => get_url($branch)
         )
      );
      if (isset($branch['child']) && is_array($branch['child'])) {
         $array = array_merge($array, $this->_get_links($branch['child']));
      }
      return $array;
   }
   
}
